
package data;

import java.sql.*;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import org.apache.struts.upload.FormFile;
import java.util.*;

/**
 *
 * @author Alejandro
 */
public class AgregarEntregaAction extends org.apache.struts.action.Action {

    /* forward name="success" path="" */
    private static final String SUCCESS = "success";

    @Override
    public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {

        AgregarEntregaForm myForm = (AgregarEntregaForm) form;
        String nombreEntrega = myForm.getNombre();
        String fecha = myForm.getFecha();
        String nota = myForm.getNota();
        String porcentaje = myForm.getPorcentaje();
        String comentario = myForm.getComentario();
        String integrantes = myForm.getIntegrantes();
        FormFile myFile = myForm.getEntrega();
        String nombreArchivo = myFile.getFileName();
        String tipoArchivo = myFile.getContentType();
        InputStream contenido = myFile.getInputStream();
        int notaEntrega = Integer.parseInt(nota);
        double porcentajeObtenido = Integer.parseInt(porcentaje) * 0.01 * notaEntrega; 
        
        BitacoraDataMapper mapper = new BitacoraDataMapper();
        String codigoEntrega = ""+mapper.obtenerNumeroEntregas();
        if(mapper.obtenerNumeroEntregas()<10) codigoEntrega = "0"+codigoEntrega;

        // Agrega los datos generales de la entrega
        mapper.agregarEntrega(codigoEntrega, nombreEntrega, fecha, nota, ""+porcentajeObtenido, comentario, request.getSession().getAttribute("BitID").toString());
        // Agrega el archivo correspondiente a la entrega
        mapper.agregarArchivo(nombreArchivo, tipoArchivo, codigoEntrega, contenido);
        
        // Agrega los integrantes de la entrega
        integrantes = integrantes.replaceAll(" ", "");
        integrantes = integrantes+",";
        String[] carnets = new String[20];
        StringTokenizer st = new StringTokenizer(integrantes,",");
        int index = 0;
        while (st.hasMoreTokens()) {
            carnets[index] = st.nextToken();
            index++;
        }
        int i=0;
        while(i<index){
            mapper.agregarIntegranteEntrega(carnets[i], codigoEntrega);
            i++;
        }
        
        // Actualiza si es mejor o peor resultado
        ResultSet res = mapper.obtenerMPResultado(request.getSession().getAttribute("BitID").toString(), nombreEntrega);
        if(res.next()){
            boolean mejor = false;
            boolean peor = false;
            if(notaEntrega > Integer.parseInt(res.getString(4))) mejor = true;
            if(notaEntrega < Integer.parseInt(res.getString(6))) peor = true;
            if(mejor) mapper.actualizarMejorResultado(request.getSession().getAttribute("BitID").toString(), nombreEntrega, codigoEntrega, notaEntrega);
            if(peor) mapper.actualizarPeorResultado(request.getSession().getAttribute("BitID").toString(), nombreEntrega, codigoEntrega, notaEntrega);
        } else {
            mapper.agregarMPResultado(request.getSession().getAttribute("BitID").toString(), nombreEntrega, codigoEntrega, notaEntrega, codigoEntrega, notaEntrega);
        }
        
        return mapping.findForward(SUCCESS);
    }
}
